#pragma once
#ifndef Image_H
#define Image_H
#include <Windows.h>

class Image
{
public:
    Image();                                //构造函数，创建行列都为零的Image对象
    Image(int h, int w);                    //构造函数重载，创建h行，w列的Image对象
    Image(int h, int w, unsigned char val); //构造函数重载，创建的图像像素值都为val;
    Image(const char *ImageName);           //构造函数重载，利用文件名从硬盘加载图像文件成为Image对象;
    Image(unsigned char *m, int h, int w);  //构造函数重载，从动态数组创建Image对象;
    Image(const Image &im);                 //拷贝构造函数;
    virtual ~Image();                       //析构函数;

    void ReadBMP(const char *ImageName); //从硬盘文件中读入图像数据;
    void WriteBMP(const char *filename); //将图像数据保存为图像文件;

    void Flip(int code);                       //图像的翻转; code为0左右，1 上下;
    void Resize(int h, int w);                 //图像的缩放为参数指定的大小
    Image Cut(int x1, int y1, int x2, int y2); //裁剪点(x1,y1)到点(x2,y2)的图像
    void Rotate(int degree);                   //图像旋转的函数（旋转角度为90度的整数倍）
    double Mean();                             //返回图像的均值
    double Variance();                         //求图像的方差
    void Grayed();
    Image gradient();
    Image operator-();      //对象图像取反，把所有像素的值都规整到[0,1]之间，然后每个像素都被1.0减
    void gray2bw(double t); //以给定阈值t对图像进行二值化，返回图像对象
    Image Cat(Image &m, int code);
    // Image MeanFilter(int filtersize); //均值滤波函数
    // Image MedianFilter(int filtersize);  // 中值滤波器函数
public:
    int height;
    int width;
    //int real_width;
    unsigned char *data;
    int linebyte;
};
#endif
